package com.andnnl.function;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;

/**
 * Created by chenss on 2020/5/18.
 */
public class FunctionTest1 {
    public static <T, R> List<R> map(List<T> list, Function<T, R> f) {
        List<R> result = new ArrayList<>();
        for (T s : list) {
            result.add(f.apply(s));
        }
        return result;
    }

    /**
     * 有反返回值
     * @param f
     * @param <R>
     * @return
     */
    public static  <R> R test1(Function<FunctionTest1, R> f){
        FunctionTest1 ft=new FunctionTest1();
        return f.apply(ft);
    }

    /**
     * 无返回值
     * @param f
     */
    public static void test2(Consumer<FunctionTest1> f){
        //TODO before
        FunctionTest1 ft=new FunctionTest1();
        f.accept(ft);
        //TODO after
    }
    public String tt(String s){
        System.out.println(s);
        return "asdf->"+s;
    }
    public void tt2(String s){
        System.out.println(s);
    }
    public static void main(String[] args) {
        // Lambda 是 Function 接 口 的 apply 方 法 的 实 现
        // [7, 2, 6]
        List<Integer> l = map(Arrays.asList(" lambdas", " in", " action"), (String s) -> s.length());
        System.out.println(l);
        //有返回值的
        System.out.println("return:"+FunctionTest1.test1(s-> s.tt("sssssssssssss")));
        //无返回值的
        FunctionTest1.test2(s-> s.tt2("test2"));
    }


}
